package org.csi.controle.status;

import org.csi.controle.status.impressora.Constantes;
import org.csi.controle.status.impressora.ImpressoraWindows;
import org.csi.controle.status.impressora.ImpressoraWindowsJNA;

import com.sun.jna.Native;

public class AtualizaTelaIp implements Runnable {

	private StatusWindow statusWindow;
	
	public AtualizaTelaIp(StatusWindow statusWindow) {
		this.statusWindow = statusWindow;
	}
	
	@Override
	public void run() {
		LocalizaImpressora li = statusWindow.getLi();
		if(li != null) {
			while(!statusWindow.getLi().isAchou()) {
				statusWindow.getLblMensagens().setText("Localizando... "+li.getHost());
				Thread.yield();
			}
		}
		statusWindow.getLblMensagens().setText("Localizado: "+li.getHost()+" - "+li.getIp());
		iniciarPorta(statusWindow.getIpImpressora());
	}
	
	public void iniciarPorta(String ip) {
		ImpressoraWindowsJNA impressoraWindows = (ImpressoraWindowsJNA)Native.loadLibrary("mp2032",ImpressoraWindowsJNA.class);
		int retornoModelo = impressoraWindows.ConfiguraModeloImpressora(5);
		if(retornoModelo == -2) {
			statusWindow.getLblMensagens().setText("Falha no retorno do modelo da impressora");
		}
		int retornoIniciarPorta = impressoraWindows.IniciaPorta(ip);
		if(retornoIniciarPorta == Constantes.ERRO_COMUNICACAO) {
			statusWindow.getLblMensagens().setText("Falha ao iniciar porta da impressora");
		}
		statusWindow.setImpressora(new ImpressoraWindows(impressoraWindows));
		impressoraWindows.HabilitaEsperaImpressao(1);
	}

}
